The handling and processing of real-time or streaming media typically involves buffering content, as well as managing multiple different buffers. Assuming, for example, that a real time media system is sending content to two recipients, it is possible to create separate instances or copies of the data in two separate buffers, and to send these two buffers to the respective recipients. These two recipients may then use, modify, and delete their respective buffer as they see fit.
The above approach may be workable in some situations, but suffers shortcomings when applied in other situations. For example, the real time media system, or a buffer management component thereof, typically allocates buffers that are large enough to store the largest foreseeable size of incoming content. This approach seeks to avoid the overhead of creating a first buffer to hold the content, overrunning the first buffer, creating a second, larger buffer, and transferring content to the second buffer. However, this approach may lead to excessive memory usage, since the space allocated within these large buffers will not be fully utilized under most circumstances.
In other scenarios, recipients of the data may wish to perform more complex operations on the data. Also, different recipients may not be interested in only portions of the data. In this case, it is inefficient to provide the entire buffer to such recipients.